<template>
    <div>
        <h4>- class可以看作只是一个语法糖，类的内部所有定义的方法，都是不可枚举的；类必须使用new调用</h4>
        <ul>
            <li>constructor方法是类的默认方法，constructor方法默认返回实例对象（即this）</li>
            <li>！！！实例的属性除非显式定义在其本身（即定义在this对象上），否则都是定义在原型上（即定义在class上）；constructor中定义实例属性和方法</li>
            <li>取值函数（getter）和存值函数（setter）：在“类”的内部可以使用get和set关键字，对某个属性设置存值函数和取值函数，拦截该属性的存取行为</li>
            <li>类的属性名，可以采用表达式：<code>let methodName = 'getArea'; [methodName]() {}</code></li>
            <li>Class 也可以采用表达式：<code>const MyClass = class Me {} 注意这个Me只在 Class 内部有定义， Class 外部，这个类只能用MyClass引用；如果类的内部没用到的话，可以省略Me：const MyClass = class {};</code></li>
            <li>注意：类和模块的内部，默认就是严格模式；不存在提升；函数的许多特性都被Class继承，包括name属性；在某个方法之前加上星号（*），就表示该方法是一个 Generator 函数；在外部使用 类中的方法时要注意：this的指向问题 可使用 bind(this)或者箭头函数解决</li>
        </ul>
        <h4>- 静态方法 加上 static关键字，就表示该方法不会被实例继承，而是直接通过类来调用</h4>
        <p>如果静态方法包含this关键字，这个this指的是类，而不是实例；静态方法可以与非静态方法重名；父类的静态方法，可以被子类继承，静态方法也是可以从super对象上调用的</p>
        <h4>- 静态属性 以前得在class外部指定：<code>class Foo{}; Foo.prop=1;</code>；现在可以在内部使用关键字static指定</h4>
        <h4>- 私有方法和私有属性</h4>
        <p>1、在命名上加下划线以区分，但在外部还是可以拿到；2、将私有方法移出模块；3、利用Symbol值的唯一性，将私有方法的名字命名为一个Symbol值，但是Reflect.ownKeys()依然可以拿到它们；<b>4、在名称前加#号表示私有</b></p>
        <h4>- new.target 属性 返回new命令作用于的那个构造函数</h4>
        <p>可以用来 确保构造函数只能通过new命令调用；或者创建 不能独立使用、必须继承后才能使用的类</p>
    </div>
</template>

<script>
export default {
    
}
</script>

<style scoped>

</style>